%run data1.py
import requests
import geocoder as gc
from gzip import decompress
from json import loads
from requests import get
import mission as ms
import json
import folium
from geopy.geocoders import Nominatim
from IPython.display import display, Markdown, clear_output
import ipywidgets as widgets
from folium.plugins import HeatMap
import numpy as np
ubikes = requests.get ("https://tcgbusfs.blob.core.windows.net/blobyoubike/YouBikeTP.json").json()["retVal"]
ntpubikes = requests.get ("https://data.ntpc.gov.tw/api/datasets/71CD1490-A2DF-4198-BEF1-318479775E8A/json?page=0&size=10000").json()
tyubikes = requests.get ("https://data.tycg.gov.tw/opendata/datalist/datasetMeta/download?id=5ca2bfc7-9ace-4719-88ae-4034b9a5a55c&rid=a1b4714b-3b75-4ff8-a8f2-cc377e4eaa0f").json()["retVal"]
tcubikes = requests.get ("https://datacenter.taichung.gov.tw/swagger/OpenData/34c2aa94-7924-40cc-96aa-b8d090f0ab69").json()["retVal"]
tnubikes = requests.get ("http://tbike-data.tainan.gov.tw/Service/StationStatus/Json").json()
ksubikes = requests.get ("http://od-oas.kcg.gov.tw/api/service/Get/b4dd9c40-9027-4125-8666-06bef1756092").json()["data"]["retVal"]
#hcubikes = requests.get ("")
import haversine as hs
from folium.plugins import MarkerCluster
#Air quality
AQI = requests.get("https://data.epa.gov.tw/api/v1/aqx_p_432?limit=1000&api_key=9be7b239-557b-4c10-9775-78cadfc555e9&format=json").json()["records"]
rainfall = requests.get("https://opendata.cwb.gov.tw/fileapi/v1/opendataapi/O-A0002-001?Authorization=CWB-027D958E-1C1F-42E5-A2BF-E8A06FB23EA3&downloadType=WEB&format=JSON").json()["cwbopendata"]["location"]
#print(rainfall)
#type(rainfall)
county = ['-----']
for key in area_data:
county.append(key)
menu = widgets.Dropdown(
options=county,
value='-----',
description='縣市:')
menu
district = ['-----']
if menu.value == '-----': menu.value = '臺北市'
for i in range(len(area_data[menu.value])):
district.append(area_data[menu.value][i])
menu2 = widgets.Dropdown(
options=district,
value='-----',
description='鄉鎮市區:')
menu2
if menu2.value == '-----': menu2.value = '中正區'
geolocator = Nominatim(timeout=10, user_agent = "dlab.berkeley.edu-workshop")
ctr = list (geolocator.geocode(menu.value+menu2.value))[1]
#AQI show
layer2 = folium.map.FeatureGroup(name='顯示每個站點AQI', show=False)
def addAQI(lat, lng):
dis = hs.haversine( (lat,lng) , (float(AQI[0]["Latitude"]) , float(AQI[0]["Longitude"])))
AQIid = 0
for i in range (1, len(AQI)):
if hs.haversine( (lat,lng) , (float(AQI[i]["Latitude"]) , float(AQI[i]["Longitude"]))) < dis and AQI[i]["AQI"] != "":
dis = hs.haversine( (lat,lng) , (float(AQI[i]["Latitude"]) , float(AQI[i]["Longitude"])))
AQIid = i
if int(AQI[AQIid]["AQI"])<=50:
layer2.add_child(folium.Circle(
location=[lat, lng],
radius=150,
popup="Laurelhurst Park",
tooltip=AQI[AQIid]['AQI'],
color="#008000",
fill_color="#008000",
fill_opacity=0.5))
return AQI[AQIid]["AQI"]
elif int(AQI[AQIid]["AQI"])<=100:
layer2.add_child(folium.Circle(
location=[lat, lng],
radius=150,
popup="Laurelhurst Park",
tooltip=AQI[AQIid]['AQI'],
color="#ffa500",
fill_color="#ffa500",
fill_opacity=0.55))
return AQI[AQIid]["AQI"]
elif int(AQI[AQIid]["AQI"])<=150:
layer2.add_child(folium.Circle(
location=[lat, lng],
radius=150,
popup="Laurelhurst Park",
tooltip=AQI[AQIid]['AQI'],
color="#ff0000",
fill_color="#ff0000",
fill_opacity=0.5))
return AQI[AQIid]["AQI"]
else:
layer2.add_child(folium.Circle(
location=[lat, lng],
radius=150,
popup="Laurelhurst Park",
tooltip=AQI[AQIid]['AQI'],
color="#c71585",
fill_color="#c71585",
fill_opacity=0.5))
return AQI[AQIid]["AQI"]
#get Rainfall information
def rain(lat, lng):
dis = hs.haversine( (lat,lng) , (float(rainfall[0]["lat"]) , float(rainfall[0]["lon"])))
rID = 0
for i in range (1, len(rainfall)):
if hs.haversine( (lat,lng) , (float(rainfall[i]["lat"]) , float(rainfall[i]["lon"]))) < dis:
dis = hs.haversine( (lat,lng) , (float(rainfall[i]["lat"]) , float(rainfall[i]["lon"])))
rID = i
if float(rainfall[rID]["weatherElement"][2]["elementValue"]["value"]) > 0:
return "現在正在下大雨!"
elif float(rainfall[rID]["weatherElement"][1]["elementValue"]["value"]) > 0:
return "現在雨勢暫歇請注意天氣狀況"
elif float(rainfall[rID]["weatherElement"][3]["elementValue"]["value"]) > 1:
return "地面濕滑請注意安全"
else:
return "安心騎乘"
#get AQI color sign
def get_c(sbi):
if sbi == 0:
return 'red'
elif sbi <= 10:
return 'orange'
else:
return 'green'
fmap = folium.Map(location=ctr, tiles = 'Stamen Terrain', zoom_start=15)
layer1 = folium.plugins.MarkerCluster(name='Youbike站點', show=True)
#Taipei
#if menu.value == '臺北市':
for key in ubikes:
#if ubikes[key]['sarea'] == menu2.value:
#addAQI(float(ubikes[key]['lat']),float(ubikes[key]['lng']))
icolor = get_c(int(ubikes[key]['sbi']))
txt = "Bikes:<b>" + ubikes[key]['sbi'] + "</b>/" + ubikes[key]['tot'] + " " + "AQI:" + addAQI(float(ubikes[key]['lat']),float(ubikes[key]['lng'])) + " Weather: <b>" + rain(float(ubikes[key]['lat']),float(ubikes[key]['lng'])) + "</b>"
layer1.add_child(folium.Marker(location=[float(ubikes[key]['lat']),
float(ubikes[key]['lng'])],popup=txt,
tooltip=ubikes[key]['sna'],
icon=folium.Icon(icon='bicycle',color=icolor,prefix='fa')))
#NTP
#if menu.value == '新北市':
for i in range (len(ntpubikes)):
#if ntpubikes[i]['sarea'] == menu2.value:
#addAQI(float(ntpubikes[i]['lat']),float(ntpubikes[i]['lng']))
icolor = get_c(int(ntpubikes[i]['sbi']))
txt = "Bikes:<b>" + ntpubikes[i]['sbi'] + "</b>/" + ntpubikes[i]['tot'] + " " + "AQI:" + addAQI(float(ntpubikes[i]['lat']),float(ntpubikes[i]['lng'])) + " Weather: <b>" + rain(float(ntpubikes[i]['lat']),float(ntpubikes[i]['lng'])) + "</b>"
layer1.add_child(folium.Marker(location=[float(ntpubikes[i]['lat']),
float(ntpubikes[i]['lng'])],popup=txt,
tooltip=ntpubikes[i]['sna'],
icon=folium.Icon(icon='bicycle',color=icolor,prefix='fa')))
#TY
#if menu.value == '桃園市':
for key in tyubikes:
#if tyubikes[key]['sarea'] == menu2.value:
#addAQI(float(tyubikes[key]['lat']),float(tyubikes[key]['lng']))
icolor = get_c(int(tyubikes[key]['sbi']))
#precip = rain(float(tyubikes[key]['lat']),float(tyubikes[key]['lng']))
txt = "Bikes:<b>" + tyubikes[key]['sbi'] + "</b>/" + tyubikes[key]['tot'] + " " + "AQI:" + addAQI(float(tyubikes[key]['lat']),float(tyubikes[key]['lng'])) + " Weather: <b>" + rain(float(tyubikes[key]['lat']),float(tyubikes[key]['lng'])) + "</b>"
layer1.add_child(folium.Marker(location=[float(tyubikes[key]['lat']),
float(tyubikes[key]['lng'])],popup=txt,
tooltip=tyubikes[key]['sna'],
icon=folium.Icon(icon='bicycle',color=icolor,prefix='fa')))
#TC
#if menu.value == '臺中市':
for key in tcubikes:
#if tcubikes[key]['sarea'] == menu2.value:
#addAQI(float(tcubikes[key]['lat']),float(tcubikes[key]['lng']))
icolor = get_c(int(tcubikes[key]['sbi']))
txt = "Bikes:<b>" + tcubikes[key]['sbi'] + "</b>/" + tcubikes[key]['tot'] + " " + "AQI:" + addAQI(float(tcubikes[key]['lat']),float(tcubikes[key]['lng'])) + " Weather: <b>" + rain(float(tcubikes[key]['lat']),float(tcubikes[key]['lng'])) + "</b>"
layer1.add_child(folium.Marker(location=[float(tcubikes[key]['lat']),
float(tcubikes[key]['lng'])],popup=txt,
tooltip=tcubikes[key]['sna'],
icon=folium.Icon(icon='bicycle',color=icolor,prefix='fa')))
#TN
#if menu.value == '臺南市':
for i in range (len(tnubikes)):
#if tnubikes[i]['District'] == menu2.value:
#addAQI(float(tnubikes[i]['Latitude']),float(tnubikes[i]['Longitude']))
icolor = get_c(int(tnubikes[i]['AvaliableBikeCount']))
txt = "Bikes:<b>" + str(tnubikes[i]['AvaliableBikeCount']) + "</b>/" + str(tnubikes[i]['Capacity']) + " " + "AQI:" + addAQI(float(tnubikes[i]['Latitude']),float(tnubikes[i]['Longitude'])) + " Weather: <b>" + rain(float(tnubikes[i]['Latitude']),float(tnubikes[i]['Longitude'])) + "</b>"
layer1.add_child(folium.Marker(location=[float(tnubikes[i]['Latitude']),
float(tnubikes[i]['Longitude'])],popup=txt,
tooltip=tnubikes[i]['StationName'],
icon=folium.Icon(icon='bicycle',color=icolor,prefix='fa')))
#KS
#if menu.value == '高雄市':
for i in range (len(ksubikes)):
#if ksubikes[i]['sarea'] == menu2.value:
#addAQI(float(ksubikes[i]['lat']),float(ksubikes[i]['lng']))
icolor = get_c(int(ksubikes[i]['sbi']))
txt = "Bikes:<b>" + ksubikes[i]['sbi'] + "</b>/" + ksubikes[i]['tot'] + " " + "AQI:" + addAQI(float(ksubikes[i]['lat']),float(ksubikes[i]['lng'])) + " Weather: <b>" + rain(float(ksubikes[i]['lat']),float(ksubikes[i]['lng'])) + "</b>"
layer1.add_child(folium.Marker(location=[float(ksubikes[i]['lat']),
float(ksubikes[i]['lng'])],popup=txt,
tooltip=ksubikes[i]['sna'],
icon=folium.Icon(icon='bicycle',color=icolor,prefix='fa')))
layer1.add_to(fmap)
layer2.add_to(fmap)
folium.LayerControl().add_to(fmap)
<folium.map.LayerControl at 0x1e88000a4f0>
display(fmap)